package com.cruise.game.service.common;

import com.cruise.game.model.vo.chat.ChatMessageVO;
import com.cruise.game.model.vo.common.PageResult;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 聊天服务接口
 *
 * @author cruise
 * @date 2025-02-28
 */
public interface ChatService {

    /**
     * 发送消息
     *
     * @param userId     用户ID
     * @param adminId    管理员ID
     * @param message    消息内容
     * @param isFromUser 是否来自用户
     * @return 消息ID
     */
    Long sendMessage(Long userId, Long adminId, String message, boolean isFromUser);

    /**
     * 获取聊天历史
     *
     * @param userId   用户ID
     * @param page     页码
     * @param pageSize 每页条数
     * @return 聊天历史
     */
    PageResult<ChatMessageVO> getChatHistory(Long userId, Integer page, Integer pageSize);

    /**
     * 获取指定管理员与用户的聊天历史
     *
     * @param userId   用户ID
     * @param adminId  管理员ID
     * @param page     页码
     * @param pageSize 每页条数
     * @return 聊天历史
     */
    PageResult<ChatMessageVO> getChatHistoryWithAdmin(Long userId, Long adminId, Integer page, Integer pageSize);

    /**
     * 获取指定时间后的新消息
     *
     * @param userId    用户ID
     * @param adminId   管理员ID
     * @param afterTime 时间点
     * @return 新消息列表
     */
    List<ChatMessageVO> getNewMessages(Long userId, Long adminId, LocalDateTime afterTime);

    /**
     * 获取用户未读消息数
     *
     * @param userId       用户ID
     * @param lastReadTime 最后读取时间
     * @return 未读消息数
     */
    int getUnreadMessageCount(Long userId, LocalDateTime lastReadTime);

    /**
     * 查找客服管理员用户
     *
     * @return 管理员用户ID
     */
    Long findAdminUser();
}